"app"
// 导入函数
const { deviceWidth, deviceHeight, randomSleep, deleteDirCache, jsDir,getRandomSong,httpUploadErrMsg,
    getTranslateTitle, waitForAndClick, waitForAndSetText, exitAppAndJs, changeKeyboard
} = require("/sdcard/Download/js/config.js");
// 唤醒设备
device.wakeUp();
const appName = "YouTube";
try{
    // 启动应用
    launchApp(appName);

    /**
     * 点击创作
     */
    {
        toast("开始")
        if (!waitForAndClick(className("android.widget.Button").desc("创作"))) {
            if(textContains("出现问题")){
                httpUploadErrMsg(appName + "登录出现问题！！")
            }
            exitAppAndJs();
        }
    }

    /**
     * 选择视频
     */
    {
        toast("选择视频")
        waitForAndClick(id("creation_modes_switcher_item"), 3);
        // 选择视频
        if (!waitForAndClick(className("FrameLayout").clickable())) 
        {
            exitAppAndJs("出错脚本："+appName+"\n问题："+"选择视频出错！");
        }
        // if (!waitForAndClick(className("android.widget.FrameLayout").depth(16))) {
        //     exitAppAndJs("出错脚本："+appName+"\n问题："+"");
        // }
    }

    /**
     * 添加详细信息
     * TODO：将测试文本转为正式数据
     */
    {
        
        var song = getRandomSong().split('|');
        toast("song = "+song)
        // 默认歌曲
        if(song.length === 0){
            toast("无歌曲，使用默认！")
            song[0] = "My 21 Summer"
            song[1] = "Samantha Choi"
        }
        var musicName = song[0]
        var musicAuthor = song[1]

        var shortVideo = true; // 短视频标志

        toast("判断是否为短视频")
        randomSleep();
        if (descContains("编辑为短视频").exists()) {
            toast("短视频")
            log("是短视频")
            shortVideo = false;
        }

        // 下一步，进入编辑视频
        toast("下一步")
        if (!waitForAndClick(text("下一步"), 2, text("下一步"))) {
            exitAppAndJs("出错脚本："+appName+"\n问题："+"点击下一步出错！");
        }
        
        // 如果是短视频，则这里有一个下一步
        toast("shortVideo = "+shortVideo)
        if (shortVideo === true) {
            toast("进入短视频")
            // TODO：进行添加音乐
            if(!waitForAndClick(textContains("添加"))){
                exitAppAndJs("出错脚本："+appName+"\n问题："+"点击添加音乐失败！")
            }
            toast("等待")
            while(waitForAndClick(id("load_progress")));
            toast("搜索框")
            if(!waitForAndClick(id("music_picker_search_box"))){
                exitAppAndJs("出错脚本："+appName+"\n问题："+"点击音乐搜索框失败！")
            }
            // 先切换键盘
            changeKeyboard();
            randomSleep();

            while(true){
                toast("设置文本")
                waitForAndClick(id("search_input_text"));
                if(!waitForAndSetText(id("search_input_text"), musicName+" "+musicAuthor)){
                    exitAppAndJs("出错脚本："+appName+"\n问题："+"")
                }
                
                toast("点击键盘搜索")
                
                // 点击键盘上的搜索
                click(deviceWidth*9 / 10, deviceHeight*9 / 10)


                // 点击歌曲
                // TODO：若没有则切换歌曲
                if(!waitForAndClick(descContains(musicName))){
                    // TODO：如果没找到
                    toast("没有歌曲")
                    song = getRandomSong().split('|');
                    musicName = song[0]
                    musicAuthor = song[1]
                    log("更换歌曲："+musicName+" "+musicAuthor)
                    continue;
                }else{
                    toast("找到歌曲")
                    // 如果找到了
                    var song_flag_temp = 0;
                    while(true){
                        randomSleep()
                        if(descContains("你的视频").exists() || song_flag_temp === 3){
                            break;
                        }else{
                            song_flag_temp++;
                        }
                    }
                    waitForAndClick(descContains("你的视频"))
                    break;
                }
            }
            // 尽量长一点，bgm可能加载不上
            sleep(5000)
            toast("下一步")
            // 编辑视频的下一步
            if (!waitForAndClick(text("下一步"), 2, text("下一步"))) {
                exitAppAndJs("出错脚本："+appName+"\n问题："+"编辑视频的下一步出错！");
            }
        }

        // 设置标题
        var strTitle = getTranslateTitle();
        if(strTitle.length > 100){
            strTitle = processTitle(strTitle);
        }
        toast("设置文本")
        if (!waitForAndSetText(className("android.widget.EditText").textContains("标题"), strTitle)) {
            exitAppAndJs("出错脚本："+appName+"\n问题："+"设置文本出错！");
        }
        toast("开启评论")

        swipe(500, 1000, 500, 500, 100)

        if (waitForAndClick(textContains("开启"))) {
            // 点击开启
            if (!waitForAndClick(descContains("开启"))) {
                exitAppAndJs("出错脚本："+appName+"\n问题："+"开启评论出错！");
            }
            // 点击返回
            if (!waitForAndClick(desc("返回"))) {
                exitAppAndJs("出错脚本："+appName+"\n问题："+"开启评论后返回出错！");
            }
        }

    
    }

    /**
     * （可能出现）如果出现"选择观众群"
     */
    {
        toast("检查是否有观众群")
        // 如果是长视频，这里有一个下一步和选择观众群
        if (shortVideo == false) {
            // 点击下一步
            if (!waitForAndClick(text("下一步"))) {
                exitAppAndJs("出错脚本："+appName+"\n问题："+"长视频出现点击下一步出错");
            }
            waitForAndClick(desc("选择观众群"), 2, descContains("内容不是面向儿童的"));
        }
    }

    /**
     * 点击上传
     */
    {
        
        if (!waitForAndClick(textContains("上传"))) {
            exitAppAndJs("出错脚本："+appName+"\n问题："+"点击上传失败！");
        }
        toast("点击上传")
    }

    /**
     * 等待上传
     */
    {
        randomSleep();
        waitForAndClick(id("text"), 2);

        while (textContains("在上传").exists() || descContains("在上传").exists()) {
            toast("等待上传结束")
            log("等待上传结束");
            sleep(5000);
        }
    }

    /**
     * 删除多余资源
     */
    {
        toast("删除资源")
        deleteDirCache(appName);
    }

    /**
     * 写入成功执行的文件
     */
    {
        toast("创建finish")
        files.createWithDirs(jsDir + "finish")
    }

    // 退出后台
    exitAppAndJs();
}catch(e){
    httpUploadErrMsg("脚本执行错误："+appName+" => "+e)
}

/**
 * 把文本使用。或者；分割成小于100个字符的字符串，不然直接裁成100个字符的字符串
 * @param {String} strTitle 
 * @returns 
 */
function processTitle(strTitle) {
    if (strTitle.length > 100) {
        // 尝试使用句号 `。` 从末尾开始分割
        let lastIndex = strTitle.lastIndexOf('。');
        while (lastIndex !== -1 && lastIndex > 100) {
            lastIndex = strTitle.lastIndexOf('。', lastIndex - 1);
        }

        if (lastIndex !== -1 && lastIndex <= 100) {
            return strTitle.substring(0, lastIndex + 1);
        }

        // 如果句号 `。` 分割不成功，则尝试使用分号 `；`
        lastIndex = strTitle.lastIndexOf('；');
        while (lastIndex !== -1 && lastIndex > 100) {
            lastIndex = strTitle.lastIndexOf('；', lastIndex - 1);
        }

        if (lastIndex !== -1 && lastIndex <= 100) {
            return strTitle.substring(0, lastIndex + 1);
        }

        // 如果都不成功，则直接截取前80~100个字符
        let A = 80; // 替换为你的最小值
        let B = 100; // 替换为你的最大值
        return strTitle.substring(0, Math.floor(Math.random() * (B - A + 1)) + A);
    } else {
        return strTitle;
    }
}